সি প্রোগ্রামিং ভাষায় স্ট্যান্ডার্ড লাইব্রেরি সরাসরি কোনো জটিল ডেটা স্ট্রাকচার প্রদান করে না। তবে স্ট্যান্ডার্ড সি লাইব্রেরির বিভিন্ন ফাংশন এবং ডেটা টাইপ ব্যবহার করে সহজ কিছু ডেটা স্ট্রাকচার তৈরি করা যায়। কিছু সাধারণ ডেটা স্ট্রাকচার, যেমন স্ট্যাক, কিউ, লিঙ্কড লিস্ট ইত্যাদি, স্ট্যান্ডার্ড লাইব্রেরি ফাংশনগুলো ব্যবহার করে তৈরি করা সম্ভব।
স্ট্যান্ডার্ড সি লাইব্রেরিতে কিছু গুরুত্বপূর্ণ হেডার ফাইল রয়েছে, যেগুলো ডেটা স্ট্রাকচার তৈরিতে সহায়ক। কিছু গুরুত্বপূর্ণ হেডার ফাইল হলো:
stdlib.h
– ডাইনামিক মেমোরি অ্যালোকেশন এবং ইউটিলিটি ফাংশনের জন্য।stdio.h
– ইনপুট/আউটপুট অপারেশনের জন্য।string.h
– স্ট্রিং পরিচালনার জন্য ফাংশন সরবরাহ করে।stdbool.h
– bool
ডেটা টাইপের জন্য (যা স্ট্যাক এবং কিউ এর মতো ডেটা স্ট্রাকচারের লজিক্যাল অপারেশনে সহায়ক)।স্ট্যাক হলো একটি লাস্ট ইন, ফার্স্ট আউট (LIFO) ডেটা স্ট্রাকচার। এতে সর্বশেষে সংযুক্ত ডেটা প্রথমে অপসারিত হয়। সি প্রোগ্রামিংয়ে স্ট্যাকের জন্য সাধারণত একটি এরে বা লিঙ্কড লিস্ট ব্যবহার করা হয়।
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX 10
int stack[MAX];
int top = -1;
bool isFull() {
return top == MAX - 1;
}
bool isEmpty() {
return top == -1;
}
void push(int value) {
if (isFull()) {
printf("Stack overflow\n");
} else {
stack[++top] = value;
printf("Pushed %d to stack\n", value);
}
}
int pop() {
if (isEmpty()) {
printf("Stack underflow\n");
return -1;
} else {
return stack[top--];
}
}
int main() {
push(5);
push(10);
printf("Popped: %d\n", pop());
printf("Popped: %d\n", pop());
return 0;
}
কিউ হলো একটি ফার্স্ট ইন, ফার্স্ট আউট (FIFO) ডেটা স্ট্রাকচার। এতে প্রথমে সংযুক্ত ডেটা প্রথমে অপসারিত হয়।
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX 10
int queue[MAX];
int front = -1, rear = -1;
bool isFull() {
return rear == MAX - 1;
}
bool isEmpty() {
return front == -1 || front > rear;
}
void enqueue(int value) {
if (isFull()) {
printf("Queue overflow\n");
} else {
if (front == -1) front = 0;
queue[++rear] = value;
printf("Enqueued %d to queue\n", value);
}
}
int dequeue() {
if (isEmpty()) {
printf("Queue underflow\n");
return -1;
} else {
return queue[front++];
}
}
int main() {
enqueue(5);
enqueue(10);
printf("Dequeued: %d\n", dequeue());
printf("Dequeued: %d\n", dequeue());
return 0;
}
লিঙ্কড লিস্ট হলো একটি ডেটা স্ট্রাকচার যেখানে প্রতিটি এলিমেন্ট একটি নোড হিসেবে থাকে এবং প্রতিটি নোডে ডেটা এবং পরবর্তী নোডের ঠিকানা থাকে।
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
// নতুন নোড তৈরি
struct Node* createNode(int data) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// লিঙ্কড লিস্টে একটি নতুন নোড যোগ করা
void append(struct Node** head, int data) {
struct Node* newNode = createNode(data);
if (*head == NULL) {
*head = newNode;
} else {
struct Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
// লিঙ্কড লিস্ট প্রিন্ট করা
void printList(struct Node* head) {
struct Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
struct Node* head = NULL;
append(&head, 5);
append(&head, 10);
append(&head, 15);
printList(head);
return 0;
}
ডাবল লিঙ্কড লিস্টে প্রতিটি নোডে দুটি পয়েন্টার থাকে: একটি পরবর্তী নোডের দিকে নির্দেশ করে এবং অপরটি পূর্ববর্তী নোডের দিকে নির্দেশ করে।
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
struct Node* prev;
};
// নতুন নোড তৈরি
struct Node* createNode(int data) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
newNode->prev = NULL;
return newNode;
}
// ডাবল লিঙ্কড লিস্টে নোড যোগ করা
void append(struct Node** head, int data) {
struct Node* newNode = createNode(data);
if (*head == NULL) {
*head = newNode;
} else {
struct Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
newNode->prev = temp;
}
}
// ডাবল লিঙ্কড লিস্ট প্রিন্ট করা
void printList(struct Node* head) {
struct Node* temp = head;
while (temp != NULL) {
printf("%d <-> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
struct Node* head = NULL;
append(&head, 5);
append(&head, 10);
append(&head, 15);
printList(head);
return 0;
}
স্ট্যান্ডার্ড সি লাইব্রেরি সরাসরি কোন ডেটা স্ট্রাকচার প্রদান না করলেও stdlib.h
এবং stdio.h
এর ফাংশন এবং ডাইনামিক মেমোরি অ্যালোকেশন ব্যবহার করে স্ট্যাক, কিউ, লিঙ্কড লিস্ট এবং ডাবল লিঙ্কড লিস্টের মতো ডেটা স্ট্রাকচার তৈরি করা যায়।
এই ডেটা স্ট্রাকচারগুলো ব্যবহার করে প্রোগ্রামে বিভিন্ন প্রকারের ডেটা ম্যানেজমেন্ট করা সহজ হয়।
common.read_more